$(document).ready((function(){	
    // Menu.
    $(".conteudoMenu").hide();
    $(".itemMenu").click(function(){
        $(this).next(".conteudoMenu").slideToggle(300);
    });
    
    // Pega todos os elemento do Menu.
    var itensMenu = [];
    $(".itemMenu").each(function(){
        itensMenu.push($(this).attr("id"));
    });
    
    // Monta a consulta de acordo com a navegação do usuário
    function loadQuery(){
        $.ajax({
            type: "GET",
            url: "assembles-query",
            data: {
                menu : menu,
                subMenu : subMenu,
                "optional[]": $("input[id=optional]").val(),
                "domainOntology" : $("input[id=addressDom]").val(),
                mapLista : mapList
            },
            error:function(){
                console.log("ERRO MENU");
            },
            success:function(responseText){
                $("textarea[id=assembleQuery]").text(responseText);
            }
        });
    }
    
    // Pega os valores dos subitens dos menus de acordo com o itens que o usuário for clicando.
    var key,
    value,
    mapList,
    jsonString;
    $(".conteudoMenu a").click(function(){
        key = $(this).parent(".conteudoMenu").parent("li").find(".itemMenu").attr("id");
        value = $(this).attr("id"); 
        
        mapList = JSON.stringify(generatingArrayQuery());
        jsonString = $.toJSON(mapList);
        loadQuery();
    });

    var mapaDeListas = new Object(),
    values = new Array();
    function generatingArrayQuery() {
        if (mapaDeListas[key] && $.inArray(value, mapaDeListas[key]) == -1 || mapaDeListas[key] && $.inArray(value, mapaDeListas[key]) != -1) {
            // Verifica se já existe a chave vinda do "key" e se o valor de "value" está presente no array
            if (mapaDeListas[key].indexOf(value) == -1){
                mapaDeListas[key].push(value);
            }
        }
        else {
            // Cria o array de acordo com o valor da "key" e adiciona o valor de "value"
            mapaDeListas[key] = new Object();
            values = new Array();
            values.push(value);
            mapaDeListas[key] = values;
        }
        return mapaDeListas;
    }
    
    // Pega os valores após click(s) no menu.
    var menu = [],
    subMenu = [],
    optional = [],
    inputMenu = [],
    inputSubMenu = [],
    inputOptional = [];
    $(".conteudoMenu a").click(function(){
        menu.push($(this).parent(".conteudoMenu").parent("li").find(".itemMenu").attr("id"));
        subMenu.push($(this).attr("id"));
        
        // Adiciona os valores aos arrays dos inputs @id=menu e @id=subMenu.
        //inputMenu.push($("form[name=valueArrays] input[id=menu]").val(_.intersection(itensMenu, menu)));
        inputOptional.push($("form[name=valueArrays] input[id=optional]").val(_.intersection(itensMenu, optional)));
        
        // Monta a consulta no textarea
        loadQuery();
    });
    
    // Limpa o conteúdo do textarea onde a consulta é formulada
    $("input[id=submitClear]").click(function(){
        $("textarea[id=assembleQuery]").empty();
        inputMenu.length = 0;
        inputSubMenu.length = 0;
    });
    
    // Constrói filters [OPTIONAL FILTER]
    function modalWindowsOptional(){
        // Dialog
        $(".dialog").dialog({
            autoOpen: false,
            width: 600,
            buttons: {
                "Ok": function() {
                    $(this).dialog("close");
                },
                "Cancel": function() {
                    $(this).dialog("close");
                }
            }
        });
        
        // Dialog Link
        $(".dialog_chk").click(function(){
            $(".dialog").dialog("close");
            var id_chk = $(this).attr("id");
            $("#chk_" + id_chk).dialog("open");
            
            return false;
        });
    }
    
    // Chama a janela modal
    modalWindowsOptional();
    
    // Adiciona a clausula OPTIONAL a query
    $("input[id=optional_modal]").removeAttr("checked")
    $("input[id=optional_modal]").click(function(){
        $("input[id=optional_modal]").attr("checked", true);
        if ($("input[id=optional_modal]").is(":checked")){
            modalWindowsOptional();
            $(".conteudoMenu a").click(function(){
                optional.push($(this).parent(".conteudoMenu").parent("li").find(".itemMenu").attr("id"));
            });
        }
    });
    
}));
